package org.hyjiacan.deadqq.client.window;

import java.util.HashMap;

import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

import org.hyjiacan.deadqq.common.entity.User;


/**
 * 窗口管理器。其作用是将程序中所有已经实例化的窗口以键值
 * 对的方式存储起来，其键值为窗口类的名字，特别地，聊天窗口类和用户信息查看窗口类的键名为类名字加上“-”符号加上User的账号（Number）信息
 * 
 * @author hyjiacan
 * @see User
 */
public final class WindowManager {
	private static HashMap<String, JFrame> windows = new HashMap<String, JFrame>();

	private WindowManager() {
	}

	/**
	 * 保存一个窗口的实例
	 * 
	 * @param key
	 *            类名字
	 * @param value
	 *            实例
	 */
	public static void put(String key, JFrame value) {
		if (windows.containsKey(key) || windows.containsValue(value)) {
			return;
		}
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
			value.validate();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (UnsupportedLookAndFeelException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		windows.put(key, value);
	}

	/**
	 * 根据实例名字获取一个实例，并将其从窗口管理器中移除。此操作应该在窗口被销毁时调用。
	 * 
	 * @param key
	 * @return
	 */
	public static JFrame remove(String key) {
		return windows.remove(key);
	}

	/**
	 * 根据实例名字获取一个实例
	 */
	public static JFrame get(String key) {
		return windows.get(key);
	}

	/**
	 * 程序中是否存在名为key的实例
	 * 
	 * @param key
	 *            实例名
	 * @return 存在则返回true， 否则返回false
	 */
	public static boolean exists(String key) {
		return windows.containsKey(key);
	}

	/**
	 * 程序中是否存在value实例
	 * 
	 * @param value
	 *            实例
	 * @return 存在则返回true， 否则返回false
	 */
	public static boolean exists(JFrame value) {
		return windows.containsValue(value);
	}
}
